import 'dart:convert';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:http/http.dart' as http;
import '../models/todo.dart';
part 'todo_list_provider.g.dart';

//当 @riverpod 注解被放置在一个类上时，该类被称为“通知者程序”。
// 类必须扩展 _$NotifierName ，其中 NotifierName 是类名。
//通知者程序负责公开修改提供者程序状态的方法。
//使用者可以使用 ref.read(yourProvider.notifier).yourMethod() 此类上的公共方法。
@riverpod
class TodoList extends _$TodoList {
  @override
  Future<List<Todo>> build() async {
    // 我们之前在 FutureProvider 中的业务逻辑现在位于 build 方法中。
    return [
      Todo(description: 'Learn Flutter', completed: true, id: '1'),
      Todo(description: 'Learn Riverpod', completed: false, id: '2'),
    ]; // 初始空列表
  }

  Future<void> addTodo(Todo todo) async {
    await http.post(
      Uri.https('your_api.com', '/todos'),
      // 我们序列化 Todo 对象并将其 POST 到服务器。
      headers: {'Content-Type': 'application/json'},
      body: jsonEncode(todo),
    );
  }
}
